#ifndef __SLAM_DEFINE_H_
#define __SLAM_DEFINE_H_

#include <gflags/gflags.h>
#include <glog/logging.h>
#include <opencv2/highgui.hpp>
#include <Eigen/Eigen>
#include <Eigen/Dense>

#include <ros/ros.h>
#include <tf2_ros/buffer.h>
#include <tf2_ros/transform_listener.h>
#include <tf2/LinearMath/Quaternion.h>
#include <tf2/LinearMath/Matrix3x3.h>
#include <tf2/utils.h>
#include <tf2_geometry_msgs/tf2_geometry_msgs.h> 

#include <nav_msgs/OccupancyGrid.h>
#include <nav_msgs/Odometry.h>
#include <nav_msgs/Path.h>
#include <sensor_msgs/LaserScan.h>
#include <sensor_msgs/Imu.h>
#include <sensor_msgs/PointCloud.h>
#include <sensor_msgs/PointCloud2.h>

using namespace std;
using namespace Eigen;

using Vec2i = Eigen::Vector2i;
using Vec2d = Eigen::Vector2d;
using Vec2f = Eigen::Vector2f;
using Vec3i = Eigen::Vector3i;
using Vec3b = Eigen::Matrix<char, 3, 1>;
using Vec3d = Eigen::Vector3d;
using Vec3f = Eigen::Vector3f;
using Mat3d = Eigen::Matrix3d;
using Mat3f = Eigen::Matrix3f;
using Pose2D = Eigen::Isometry2d;
using Pose2f = Eigen::Isometry2f;
using Pose3D = Eigen::Isometry3d;

namespace slam_2d{
    using Scan2D = sensor_msgs::LaserScan;
    using Scan2DPtr = Scan2D::Ptr;
    using Imu = sensor_msgs::Imu;
    using ImuPtr = sensor_msgs::Imu::Ptr;
    using Odometry = nav_msgs::Odometry;
    using OdometryPtr = nav_msgs::Odometry::Ptr;

};




#endif